home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / Carnage_Contest / scripts / CC Original / weapons / Mine.lua < prev    next >
Text File  |  2010-08-31  |  4KB  |  128 lines

  1. --------------------------------------------------------------------------------
  2. -- Weapon Mine + Projectile Mine
  3. -- Original Carnage Contest Weapon
  4. -- Script by DC, March 2010, www.UnrealSoftware.de
  5. --------------------------------------------------------------------------------
  6.  
  7. -- Setup Tables
  8. if cc==nil then cc={} end
  9. cc.mine={}
  10. cc.mine.mine={}
  11.  
  12. -- Load & Prepare Ressources
  13. cc.mine.gfx_wpn=loadgfx("weapons/mine.bmp")                        -- Weapon Image
  14. setmidhandle(cc.mine.gfx_wpn)
  15. cc.mine.sfx_attack=loadsfx("throw.ogg")                            -- Attack Sound
  16. cc.mine.sfx_bounce=loadsfx("bounce.wav")                        -- Bounce Sound
  17.  
  18. --------------------------------------------------------------------------------
  19. -- Weapon: mine
  20. --------------------------------------------------------------------------------
  21.  
  22. cc.mine.id=addweapon("cc.mine","Mine",cc.mine.gfx_wpn,1)                -- Add Weapon (1 use)
  23.  
  24. function cc.mine.draw()                                                    -- Draw
  25.     if getplayeraction(0)==0 and weapon_shots<=0 then
  26.         setblend(blend_alpha)
  27.         setalpha(1)
  28.         setcolor(255,255,255)
  29.         setscale(1,1)
  30.         setrotation(0)
  31.         drawimage(cc.mine.gfx_wpn,getplayerx(0)+getplayerdirection(0)*7,getplayery(0)+2)
  32.     end
  33. end
  34.  
  35. function cc.mine.attack(attack)                                            -- Attack
  36.     if (weapon_shots<=0) then
  37.         if attack==1 then
  38.             -- No more weapon switching!
  39.             useweapon(0)
  40.             playsound(cc.mine.sfx_attack)
  41.             weapon_shots=weapon_shots+1
  42.             id=createprojectile(cc.mine.mine.id)
  43.             projectiles[id]={}
  44.             -- Ignore collision with current player at beginning
  45.             projectiles[id].ignore=playercurrent()
  46.             -- Set initial position of projectile
  47.             projectiles[id].x=getplayerx(0)+getplayerdirection(0)*7
  48.             projectiles[id].y=getplayery(0)+2
  49.             -- Set speed of projectile
  50.             projectiles[id].sx=getplayerdirection(0)*0.5
  51.             projectiles[id].sy=-1
  52.             -- End Turn
  53.             endturn()
  54.         end
  55.     end
  56. end
  57.  
  58. --------------------------------------------------------------------------------
  59. -- Projectile: mine
  60. --------------------------------------------------------------------------------
  61.  
  62. cc.mine.mine.id=addprojectile("cc.mine.mine")    -- Add Projectile
  63.  
  64. function cc.mine.mine.draw(id)                            -- Draw
  65.     -- Setup draw mode
  66.     setblend(blend_alpha)
  67.     setalpha(1)
  68.     setcolor(255,255,255)
  69.     setscale(1,1)
  70.     setrotation(0)
  71.     -- Draw projectile
  72.     drawimage(cc.mine.gfx_wpn,projectiles[id].x,projectiles[id].y)
  73.     -- Draw Arrow if out of Screen
  74.     outofscreenarrow(projectiles[id].x,projectiles[id].y)
  75. end
  76.  
  77. function cc.mine.mine.update(id)                    -- Update
  78.     -- Gravity influence on speed + decrease x speed
  79.     projectiles[id].sx=projectiles[id].sx*0.95
  80.     projectiles[id].sy=projectiles[id].sy+getgravity()
  81.     -- Move (in substep loop for optimal collision precision)
  82.     msubt=math.ceil(math.max(math.abs(projectiles[id].sx),math.abs(projectiles[id].sy))/3)
  83.     msubx=projectiles[id].sx/msubt
  84.     msuby=projectiles[id].sy/msubt
  85.     for i=1,msubt,1 do
  86.         -- Move X
  87.         projectiles[id].x=projectiles[id].x+msubx
  88.         if collision(cc.mine.gfx_wpn,projectiles[id].x,projectiles[id].y)==1 then
  89.             if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  90.                 if (math.abs(projectiles[id].sx)>0.5) then playsound(cc.mine.sfx_bounce) end
  91.                 projectiles[id].x=projectiles[id].x-msubx
  92.                 projectiles[id].sx=-projectiles[id].sx*0.05
  93.                 msubx=-msubx*0.05
  94.             end
  95.         else
  96.             projectiles[id].ignore=0
  97.         end
  98.         -- Move Y
  99.         projectiles[id].y=projectiles[id].y+msuby
  100.         if collision(cc.mine.gfx_wpn,projectiles[id].x,projectiles[id].y)==1 then
  101.             if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  102.                 if (math.abs(projectiles[id].sy)>0.5) then playsound(cc.mine.sfx_bounce) end
  103.                 projectiles[id].y=projectiles[id].y-msuby
  104.                 projectiles[id].sy=-projectiles[id].sy*0.3
  105.                 msuby=-msuby*0.3
  106.                 -- Remove / Exchange with real mine
  107.                 if (math.abs(projectiles[id].sy)<0.3) then
  108.                     createobject(o_mine,projectiles[id].x,projectiles[id].y)
  109.                     freeprojectile(id)
  110.                 end
  111.             end
  112.         else
  113.             projectiles[id].ignore=0
  114.         end        
  115.         -- Water
  116.         if (projectiles[id].y)>getwatery()+5 then
  117.             -- Effects
  118.             particle(p_waterhit,projectiles[id].x,projectiles[id].y)
  119.             playsound(sfx_hitwater1)
  120.             -- Free projectile
  121.             freeprojectile(id)
  122.             break
  123.         end
  124.     end
  125.     -- Scroll to projectile
  126.     scroll(projectiles[id].x,projectiles[id].y)
  127. end
  128.